package com.metro.qd.iscs.l11;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.metro.qd.iscs.EventLevel;
import org.joda.time.DateTime;

import java.util.Objects;

public class EventValue extends com.metro.qd.iscs.EventValue {
	private static final long serialVersionUID = 1L;

	/** 线路代码，由线网提供各线路的代码数据字典 */
	@JsonProperty("Line")
	public int line;

	/** 车站代码，由线网提供数据字典 */
	public int station;

	/** 专业代码，由线网提供数据字典 */
	public String subsystem;

	/** 设备代码（线路内部定义所有数据点代码） */
	public String device;

	/** 测点代码，线路内部定义所有数据点代码全线唯一且不重复（与提供的全线点表寄存器一一对应） */
	public String point;

	/** 事件产生模式 */
	@JsonProperty("event_mode")
	public int mode;

	/** 测点值（状态点值用0,1,2等数据表示） */
	@JsonProperty("Value")
	public Number value;

	/** 事件类型 */
	@JsonProperty("event_type")
	public int type;

	/** 报警等级 */
	@JsonProperty("event_level")
	public int level;

	/** 事件文字描述 */
	@JsonProperty("event_desc")
	public String desc;

	/** 操作人员 */
	@JsonProperty("oper_user")
	public String opUser;

	/** 操作主机名称 */
	@JsonProperty("oper_host")
	public String opHost;

	/** 操作时间（操作前为事件发生时间，操作后为操作时间） */
	@JsonProperty("time_ms")
	public long timeMs;

	@Override
	public Object getUid() {
		return null;
	}

	@Override
	public DateTime getOccur() {
		return Objects.isNull(opUser) ? new DateTime(timeMs) : null;
	}

	@Override
	public EventLevel getLevel() {
		return null;
	}

	@Override
	public Object getObject() {
		return device;
	}

	@Override
	public Object getMetric() {
		return point;
	}

	@Override
	public Number getVal() {
		return value;
	}

	@Override
	public String getDesc() {
		return desc;
	}

	@Override
	public boolean isAck() {
		return Objects.nonNull(opUser);
	}

	@Override
	public String getAckSubject() {
		return opUser;
	}

	@Override
	public DateTime getAckTime() {
		return Objects.nonNull(opUser) ? new DateTime(timeMs) : null;
	}
}
